package types

// Message 消息内容
type Message struct {
	Role    string `json:"role"`    // 消息角色
	Content string `json:"content"` // 消息内容
}

// ApiRequest 大模型请求参数
type ApiRequest struct {
	Model       string        `json:"model,omitempty"`      // 模型
	Temperature float32       `json:"temperature"`          // 采样温度
	MaxTokens   int           `json:"max_tokens,omitempty"` // 控制生成的响应的最大 tokens 数量
	Stream      bool          `json:"stream,omitempty"`     // 是否流式输出
	Messages    []interface{} `json:"messages,omitempty"`   // 消息切片
}

// ChatSession 聊天会话对象
type ChatSession struct {
	UserId   uint      `json:"user_id"`   // 用户Id
	ClientIP string    `json:"client_ip"` // 客户端IP
	ChatId   string    `json:"chat_id"`   // 客户端聊天会话ID，多会话模式专用字段
	Model    ChatModel `json:"model"`     // GPT 模型
	Start    int64     `json:"start"`     // 开始请求时间戳
	Tools    []int     `json:"tools"`     // 工具函数列表
	Stream   bool      `json:"stream"`    // 是否采用流式输出
}

type ChatModel struct {
	Id          uint    `json:"id"`
	Name        string  `json:"name"`        // 模型名称
	Value       string  `json:"value"`       // 模型值
	Power       int     `json:"power"`       // 模型消耗的算力
	MaxTokens   int     `json:"max_tokens"`  // 最大响应长度
	MaxContext  int     `json:"max_context"` // 最大上下文长度
	Temperature float32 `json:"temperature"` // 模型温度
	KeyId       int     `json:"key_id"`      // 绑定的API KEY
}

const PromptMsg = "prompt" // prompt message
const ReplyMsg = "reply"   // reply message

// PowerType 算力日志类型
type PowerType int

const (
	PowerRecharge = PowerType(1) // 充值
	PowerConsume  = PowerType(2) // 消费
	PowerRefund   = PowerType(3) // 任务（SD,MJ）执行失败，退款
	PowerInvite   = PowerType(4) // 邀请奖励
	PowerRedeem   = PowerType(5) // 众筹
	PowerGift     = PowerType(6) // 系统赠送
)

func (t PowerType) String() string {
	switch t {
	case PowerRecharge:
		return "充值"
	case PowerConsume:
		return "消费"
	case PowerRefund:
		return "退款"
	case PowerRedeem:
		return "兑换"
	case PowerGift:
		return "赠送"
	case PowerInvite:
		return "邀请"
	}
	return "其它"
}

type PowerMart int

const (
	PowerSub = PowerMart(0) // 增加算力
	PowerAdd = PowerMart(1) // 扣减算力
)
